[MCU] I2C Synchronous Protocol 데이터 송수신 오실로스코프 검증 - kenGwon/FirmwareProgramming_Lecture GitHub Wiki

비동기통신(Asynchronous Transmit/Receive)와 동기통신(Synchronous Transmit/Receive)

지난시간에 살펴보았던 UART통신은 비동기(Asynchronous) 통신 방식을 통해 데이터를 주고 받는 통신 방법이었다. 그래서 데이터를 주고 받는 두 객체 각각에 TX단자와 RX단자가 위치하여, 어느 한쪽에서 데이터를 TX단자로 송신하면 다른 한쪽에서는 데이터를 RX로 수신하는 방식으로 통신이 이루어졌다. 때문에 오실로스코프로 관측한 한번의 전기적 파형은 반드시 어느 한쪽에서만 송신한 데이터였다.

하지만 오늘 살펴볼 I2C Protocol통신은 동기(Synchronous) 통신 방식을 통해 데이터를 주고 받는다.

I2C 동기통신의 경우 통신을 하는 객체들이 동일한 클락신호에 동기화되어있기 때문에, 오실로스코프로 관측한 한번의 전기적 파형 안에서도 일부 신호는 Master객체가 송신하고, 일부 신호는 Slave객체가 송신한 것을 발견할 수 있다.

다음은 I2C프로토콜을 통해 Master객체(MCU)가 Slave객체(I2C모듈)로 ascii코드 '5'(0x35)를 송신하여 발생한 전기신호의 구형파를 분석한 그림이다

I2C 프로토콜은 SCL선을 통해 동기화된 클럭신호가 흐르고, SDA선을 통해 데이터 신호가 흐르게 된다. 여기서 I2C 프로토콜은 SCL선을 통해 동기화 되어있는 클락신호의 상승엣지부터 하강엣지 직전까지 구간에서 SDA선을 통해 들어오고 있는 데이터의 신호가 High인지 Low인지를 판별한다. 그리하여 해당 구간에서의 SDA신호가 High이면 데이터 1이 들어온 것으로 판단하고, Low면 데이터 0이 들어온 것으로 판단한다.

참고자료